<?php
/**
 * Page gestion des types d'ue
 * Permet l'affichage, l'ajout, la suppression et la modification de type
 * d'enseignement
 *
 * @category actions
 * @package administration
 *
 * @author M.CASTANHEIRO, M.MEUNIER, O.PATTE, C.PORTEMER, R.THERY-HERMAIN
 * @version 1.0
 */
class typeUeAction extends shAction {
    /**
     * Fonction appellée automatiquement pour toutes les requêtes de l'action
     */
    public function init() {
	$this->setTitle('Gestion des types d\'enseignement');
	$this->addAriane(shRequest::link('administration'), 'Administration');
	$this->addAriane(shRequest::link('administration', 'ue'), 'Gestion des Ues');
    }

    public function execute() {
	$this->setTitle('Gestion des types d\'enseignement');

	// On selectionne tous les types d'enseignement
	$types = shSGBD::select('SELECT type_enseignement.id, type_enseignement.intitule FROM type_enseignement '.
		'ORDER BY type_enseignement.intitule ASC');

	$this->assign('types', $types);
    }


    /**
     * Modification d'un type enseignement
     * @param <integer> Identifiant du type enseignement à modifier
     */
    public function executeEdit($id_type_ue) {
	$this->addAriane(shRequest::link('administration', 'typeUe'), 'Gestion des types d\'enseignement');
	$this->setTitle('Modification d\'un type d\'enseignement');

	// On récupère le type d'ue
	if ( !($type_ue = shSGBD::selectOne(
	    'SELECT  type_enseignement.id, type_enseignement.intitule FROM type_enseignement '.
	    'WHERE id=?'
	    ,array($id_type_ue))) ) {
	    throw new Exception('Le type d\'enseignement demandé n\'existe pas');
	    return false;
	}

	$formulaire = new shFormulaire;
	$formulaire->setSubmitText('Modifier ce type d\'enseignement');

	// Intitulé de la salle
	shField::text('Intitulé')
		->setValue($type_ue->intitule)
		->appendTo($formulaire);

	$formulaire->setCheck(function($formulaire) use ($type_ue) {
		if (!$formulaire->isError()) {
		    // On vérifie qu'on a pas le même intitulé qui existe
		    $type = shSGBD::selectOne('SELECT count(type_enseignement.id) AS count '.
			    'FROM type_enseignement '.
			    'WHERE intitule=:intitule AND id!=:id ',
			    array (':intitule'=>$formulaire->getField('Intitulé')->getValue(),
			    ':id'=>$type_ue->id));
		    if ($type->count > 0) {
			$formulaire->getField('Intitulé')->setError('Une autre salle possède le même intitulé');
		    }
		}
	    })
	;

	$formulaire->setSubmit(function($formulaire) use ($type_ue) {
		    // On crée le nouveau profil
		    shSGBD::update('UPDATE type_enseignement SET intitule=:intitule '.
			    'WHERE id=:id',
			    array( ':intitule' => $formulaire->getField('Intitulé')->getValue(),
			    ':id' => $type_ue->id));
		    shAction::redirect('administration','typeue');
		})
	;

	$this->assign('formulaire', $formulaire);
    }

    /**
     * Ajout d'un batiment
     */
    public function executeCreate() {
	$this->addAriane(shRequest::link('administration', 'typeUe'), 'Gestion des types d\'enseignement');
	$this->setTitle('Ajout d\'un type d\'enseignement');

	$formulaire = new shFormulaire;
	$formulaire->setSubmitText('Ajouter ce type');

	// Intitulé de la salle
	shField::text('Intitulé')->appendTo($formulaire);

	$formulaire->setCheck(function($formulaire) {
		    if (!$formulaire->isError()) {
			// On vérifie qu'on a pas le même intitulé qui existe
			$salle = shSGBD::selectOne('SELECT count(type_enseignement.id) AS count '.
				'FROM type_enseignement '.
				'WHERE intitule=:intitule',
				array (':intitule'=>$formulaire->getField('Intitulé')->getValue()));
			if ($salle->count > 0) {
			    $formulaire->getField('Intitulé')->setError('Un autre type d\'enseignement possède le même intitulé');
			}
		    }
		})
	;

	$formulaire->setSubmit(function($formulaire) {
		    // On crée le nouveau profil
		    shSGBD::update('INSERT INTO type_enseignement (intitule) VALUES (:intitule ) ',
			    array( ':intitule' => $formulaire->getField('Intitulé')->getValue()));
		    shAction::redirect('administration','typeue');
		})
	;

	$this->assign('formulaire', $formulaire);
    }

    /**
     *
     * @todo Etablir ce qu'il faut faire en groupe
     * @param <integer> Idenfiant du type d'enseignement à supprimer
     */
    public function executeDelete($_id_type_enseignement) {
	$this->setTitle('Suppression d\'un type d\'enseignement');

	// L'effacement d'un type d'enseignement a un impact sur
	//  - Type enseignement
	//  |	- enseignement
	//	|   -	groupe
	//	|   -	seance

		// On récupere tous les enseignements qui seront impactés par l'effacement
	$enseignements = shSGBD::select('SELECT id FROM enseignement WHERE id_type_enseignement=?', array($_id_type_enseignement));
	if (!empty($enseignements)) {
	    $idEnseign = array();
	    foreach ($enseignements as $enseignement) {
		$idEnseign[] = $enseignement->id;
	    }

	    //  On a besoin des enseignements dans groupe et séance
	    //  On les recupèrent avant de les effacer
	    //	Partie Groupe
	    $groupes = shSGBD::select('SELECT id FROM groupe '.
		    'WHERE id_enseignement IN (?'.str_repeat(',? ', sizeof($idEnseign) - 1).') ',$idEnseign);
	    // Pour chaque groupe on execute le delete propre au groupe
	    foreach ($groupes as $groupe) {
		$this->call('groupe','delete',array($groupe->id));
	    }

	    // Partie Seance
	    $seances = shSGBD::select('SELECT id FROM seance '.
		    'WHERE id_enseignement IN (?'.str_repeat(',? ', sizeof($idEnseign) - 1).') ',$idEnseign);

	    if (!empty($seances)) {
		$idSeances = array();
		foreach ($seances as $seance) {
		    $idSeances[] = $seance->id;
		}
		//	+   On supprime toutes traces des séances dans mutualiser et participer
		//	+   On supprime toutes les séances
		shSGBD::delete('DELETE FROM mutualiser WHERE id_seance IN (?'.str_repeat(',? ', sizeof($idSeances) - 1).') ',$idSeances);
		shSGBD::delete('DELETE FROM participer WHERE id_seance IN (?'.str_repeat(',? ', sizeof($idSeances) - 1).') ',$idSeances);
		shSGBD::delete('DELETE FROM seance WHERE id IN (?'.str_repeat(',? ', sizeof($idSeances) - 1).') ',$idSeances);
	    }
	}

	//  -	On termine cette partie par la suppression des enseignements
	shSGBD::delete('DELETE FROM enseignement WHERE id_ue=?', array($_id_ue));

	// Ensuite on termine la suppression du type ue
	shSGBD::delete('DELETE FROM type_enseignement WHERE type_enseignement.id=:id_type_ue '
	    ,array($_id_type_enseignement));

	// On retourne sur la page
	shAction::redirect('administration','typeue');

    }
}
?>